package com.guoxin.part4.chapter15;

/**
 * 任务生命周期接口
 *
 * @author guoxin
 * @date 2019/8/30
 */
public interface TaskLifeCycle<T> {
    /**
     * 任务启动时触发
     *
     * @param thread Thread
     */
    void onStart(Thread thread);

    /**
     * 任务正在运行时会触发
     *
     * @param thread Thread
     */
    void onRunning(Thread thread);

    /**
     * 任务运行结束时会触发，其中result是任务执行结束后的结果
     *
     * @param thread Thread
     * @param result 结果
     */
    void onFinish(Thread thread, T result);

    /**
     * 任务执行报错时会触发
     *
     * @param thread Thread
     * @param e Exception
     */
    void onError(Thread thread,Exception e);

    /**
     * 生命周期接口空实现（Adapter）
     * 主要是为了让使用者保持对Thread类的使用习惯
     * 
     * @author guoxin
     * @date 2019年9月4日
     */
    class EmptyLifeCycle<T> implements TaskLifeCycle<T>{

        @Override
        public void onStart(Thread thread) {

        }

        @Override
        public void onRunning(Thread thread) {

        }

        @Override
        public void onFinish(Thread thread, T result) {

        }

        @Override
        public void onError(Thread thread, Exception e) {

        }
    }
}
